home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
PROBLEMS
/
ASM
/
TLA_EXAMINE
< prev
Wrap
Text File
|
1991-10-27
|
966b
|
57 lines
Zur Addressarithmetik:
Wenn der Assembler relocatable code erzeugt ist es natuerlich
einigermassen umoeglich Addressen zu multipliziern und dividieren.
Subtrathieren kann man sie solange die relativen schon definiert
sind. relativ - relativ = absolute
Instruktionen wie
MOV R0, #Addresse / 256
wo Addresse eine relocatale address ist, koennen nicht erzeugt werden,
da der Wert von Address beim Assemblieren unbekannt ist.
Das man doch so einiges machen kann, zeigt folgendes Beispiel:
.PROC test
.ENTRY start
.MACRO LOAD
\load
.IF \load - %2 > 4084.
MOV %1, #((\load - %2 + 8 + 8) / 100) << 8
ADD %1, %1, #((\load - %2 + 8 + 8) & 0FF)
SUB %1, PC, %1
LDR %1, [%1]
.ELSE
LDR %1, %2
.ENDC
.ENDM
textaddress:
.WORD text
text:
.STRING "This is a far away string."
.ALIGN
.BLOCK 2000
start:
LOAD R0, textaddress
SWI OS_Write0
SWI OS_NewLine
SWI OS_Exit
.END
Dies ist sogar relocatable code, man kann ihn linken.